from ..utils.crypto_utils import crypto_utils
from ..utils.crypto_utils import server_utils
from ..utils.config_reader import read_util
from ..utils.logger import logger
from src.backend.backend_user import backend_user
from src.backend.backend_course import backend_course
from .app_base import AppBase


class AppCourse:
    """
    课程模块服务类，提供与课程相关的各种操作。
    """

    @staticmethod
    def add_course_by_test():
        """
        推送课程
        """
        user_phone = read_util.load_assertions('app_auth_data.yaml')['App登录测试用例']['请求数据']['loginName']

        logger.info("------推送普通课程------")
        userid = backend_user.get_user_info_id(user_phone)  # 查询用户id
        orders_id = backend_user.orders_get_userinfo_id(userid)['orderNo']  # 查询用户对应的交易编码号
        backend_course.orders_add(read_util.read_data()['预生产课程模块id对应']['世界史'], user_phone, userid, orders_id)

        # logger.info("------推送纸上课程------")
        # backend_course.paper_course_push(userid, read_util.read_data()['预生产纸上课堂课程对应id']['技术测试用,请勿推送出去'],
        #                                  "2037-11-23 14:38")

    @staticmethod
    @server_utils.handle_exceptions("查询课程模块失败")
    def find_my_course(course_data, return_full_resp=True, index1=0, index2=0):
        """
        查询课程模块列表
        """
        resp = crypto_utils.app_post_request(url=f"/v1/orders/findMyCourse", data=crypto_utils.prepare_data(course_data))

        if return_full_resp:
            return resp

        orders_id = resp['appData']['courseList'][index1]['ordersId']
        rs_mo = resp['appData']['courseList'][index2]['courseInformationId']
        return orders_id, rs_mo

    @staticmethod
    @server_utils.handle_exceptions("查询课程模块详情列表失败")
    def find_by_courseId(course_data):
        """
        查询课程模块详情列表。
        """
        return crypto_utils.app_post_request(url=f"/v1/course/findByCourseId", data=crypto_utils.prepare_data(course_data))

    @staticmethod
    @server_utils.handle_exceptions("查询章节视频详情失败")
    def find_by_chapter_video(course_data):
        """
        查询章节视频详情
        """
        return crypto_utils.app_post_request(url=f"/v1/course/findBychapterVideo", data=crypto_utils.prepare_data(course_data))

    @staticmethod
    @server_utils.handle_exceptions("查询学习自测详情失败")
    def get_course_self_test_exercises(course_data):
        """
        查询学习自测详情
        """
        return crypto_utils.app_post_request(url=f"/v1/books/course/getCourseSelfTestExercises", data=crypto_utils.prepare_data(course_data))

    @staticmethod
    @server_utils.handle_exceptions("收藏/取消收藏课程失败")
    def add_or_update_collection(course_data):
        """
        收藏/取消收藏课程
        """
        return crypto_utils.app_post_request(url=f"/v1/collection/addorUpdateCollection", data=crypto_utils.prepare_data(course_data))

    @staticmethod
    @server_utils.handle_exceptions("查询学习自测-答案详情失败")
    def study_test_answer_detail(course_data):
        """
        查询学习自测-答案详情
        """
        return crypto_utils.app_post_request(url=f"/v1/books/course/courseSelfTestExercisesProofreadAnswer", data=crypto_utils.prepare_data(course_data))

    @staticmethod
    @server_utils.handle_exceptions("学习自测-提交自测失败")
    def submit_answer_study_test(course_data):
        """
        学习自测-提交自测
        """
        return crypto_utils.app_post_request(url=f"/v1/books/wrongPaper/submit/selfTest", data=crypto_utils.prepare_data(course_data))

    @staticmethod
    @server_utils.handle_exceptions("课程-查看配套习题/课程失败")
    def view_practice_exercises(course_data):
        """
        课程-查看配套习题/课程
        """
        return crypto_utils.app_post_request(url=f"/v1/userinfolearnrecord/getPaperCourseAttachmentPageNo", data=crypto_utils.prepare_data(course_data))

    @staticmethod
    @server_utils.handle_exceptions("课程-视频播放进度保存失败")
    def play_passage_record(course_data):
        """
        课程-视频播放进度保存
        """
        return crypto_utils.app_post_request(url=f"/v1/ordersCourse/playPassageRecord", data=crypto_utils.prepare_data(course_data))

    @staticmethod
    @server_utils.handle_exceptions("课程-打开课程评分弹窗失败")
    def judge_evaluate(course_data):
        """
        课程-打开课程评分弹窗
        """
        return crypto_utils.app_post_request(url=f"/v1/course/judgeEvaluate", data=crypto_utils.prepare_data(course_data))

    @staticmethod
    @server_utils.handle_exceptions("课程-提交课程评分失败")
    def chapter_evaluate(course_data):
        """
        课程-提交课程评分
        """
        return crypto_utils.app_post_request(url=f"/v1/course/chapterEvaluate", data=crypto_utils.prepare_data(course_data))

    @staticmethod
    @server_utils.handle_exceptions("课程-查询课程视频注释失败")
    def get_video_explaining(course_data):
        """
        课程-查询课程视频注释
        """
        return crypto_utils.app_post_request(url=f"/v1/course/getVideoExplaining", data=crypto_utils.prepare_data(course_data))

    @staticmethod
    @server_utils.handle_exceptions("课程-删除最近学习列表失败")
    def delete_recent_learning(course_data):
        """
        课程-删除最近学习列表
        """
        return crypto_utils.app_post_request(url=f"/v1/myCourse/deleteRecentLearning", data=crypto_utils.prepare_data(course_data))


app_course = AppCourse()
